﻿using System;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace CleverDD.Helper.Tool
{
    public class QuartzStart
    {
        // 创建一个调度器工厂
        ISchedulerFactory _schedulerFactory = new StdSchedulerFactory();
        IScheduler _scheduler;


        public async void Start()
        {
            // 获取调度器实例
             _scheduler = await _schedulerFactory.GetScheduler();
             await _scheduler.Start();

            // 创建任务对象  (这边都一样，新建一个类，在类中（HourJob）写要执行的方法)
            IJobDetail hourJob = JobBuilder.Create<HourJob>()
                 .WithIdentity("hourlyTask", "dataProcessing") // 更具描述性的名称和组名
                 .Build();

            // 定义触发器，使用 Cron 表达式 表示每小时整点触发
            // Cron表达式详解：https://www.cnblogs.com/javahr/p/8318728.html
            // corn从左到右（用空格隔开）：秒 分 小时 月份中的日期 月份 星期中的日期 年份
            ITrigger hourTrigger = TriggerBuilder.Create()
                 .WithIdentity("hourlyTrigger", "dataProcessing")
                 .WithCronSchedule("0 44 * * * ?") // 每小时的第0分钟触发
                 .Build();

             // 将作业和触发器添加到调度器中
             await _scheduler.ScheduleJob(hourJob, hourTrigger);
        }
     

        public async void Stop()
        {
            if (_scheduler!=null)
            {
                await _scheduler.Shutdown();
            }
            
        }
    }

    //每天执行的方法
    class DayJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                Log.WriteLog("定时任务", "每天一次，执行成功");
                
            }
            catch (Exception ex)
            {
                // 记录异常信息
                Log.WriteLog("定时任务", "每天一次，执行失败：" + ex);
            }

            return Task.CompletedTask;
        }
    }

   

    class HourJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                // 在这里放置需要执行的任务代码
                // 确保任务逻辑包含适当的异常处理和日志记录
                string path = @"D:\保存图片";
                TimeSpan timeSpan = TimeSpan.FromDays(1);
                FileTool.DeleteOldImages(path, timeSpan);
                Log.WriteLog("定时任务", "整点执行成功：删除图片成功");
              
            }
            catch (Exception ex)
            {
                // 记录异常信息
                Log.WriteLog("定时任务", "整点执行失败:" + ex);
            }

            return Task.CompletedTask;
        }

      


     


    }
}



